﻿#pragma once
#include "yzrutil.h"
namespace yzrilyzr_util{
	EBCLASS(Flag){
	private:
	uint32_t flags;
	public:
	Flag(){ flags=0; }
	Flag(uint32_t flags){
		this->flags=flags;
	}
	Flag(Flag & src){
		this->flags=src.flags;
	}
	bool has(uint32_t flg){
		return hasFlag(flags, flg);
	}
	bool hasAndRemove(uint32_t flg){
		bool h=has(flg);
		if(h)remove(flg);
		return h;
	}
	static bool hasFlag(uint32_t flags, uint32_t flg){
		return (flags & flg) == flg;
	}
	void remove(uint32_t flg){
		flags=removeFlag(flags, flg);
	}
	static uint32_t removeFlag(uint32_t flags, uint32_t flg){
		return (flags | flg) ^ flg;
	}
	void add(uint32_t flg){
		flags=addFlag(flags, flg);
	}
	static uint32_t addFlag(uint32_t flags, uint32_t flg){
		return flags | flg;
	}
	uint32_t get(){
		return flags;
	}
	};
}